<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>函数作业</title>
    </head>
    <body>
        <script>
            //1. 定义函数有几种方式，有什么区别？
            // 答: 函数声明式 函数表达式
            // 区别 函数声明式在函数声明前后调用均可, 函数表达式只能在函数声明后调用

            //2.return 关键字有那两种作用
            // 答: 返回函数的值 结束函数执行
            //3.函数实参数和形参个数不等时会发生什么？举例说明
            // 答:
            // 1. 形参多, 前面的按照从左到右的顺序依次赋值, 多出来的形参，没有实参进行赋值, 在函数内使用的时候 就是 undefined
            function func1(a, b) {
                console.log(a); // 1
                console.log(b); // undefined
            }
            func1(1);
            // 2.  实参多, 前面的按照从左到右的顺序依次赋值, 多出来的实参，在函数内没有形参接收, 在函数内不能**直接使用**,通过 arguments 间接使用
            function func2(a, b) {
                console.log(a); // 1
                console.log(b); // 2
                console.log(arguments[2]); // 3
            }
            func2(1, 2, 3);
            //4.请定义一个函数，该函数功能为，传入一个值，返回这个值的平方值;
            function getSquare(num) {
                return num * num;
            }
            console.log(getSquare(2));
            //5.请写出一个函数，功能为：传入 2 个值，则返回其中的最大值；请再写一个函数，传入 3 个值，返回其中的最大值
            function getMax() {
                let max = arguments[0];
                for (let i = 1; i < arguments.length; i++) {
                    let max1 = arguments[i];
                    if (max < max1) {
                        max = max1;
                    }
                }
                return max;
            }
            console.log(getMax(3, 5, 9, 1, 11));

            //6.请定义一个函数，输入一个 N 值，则计算出该值的阶乘，即：`n! = 1*2*3*4*5*6*...`
            function factorail(num) {
                if (num <= 1) {
                    return 1;
                } else {
                    return num * factorail(num - 1);
                }
            }
            console.log(factorail(3));
        </script>
    </body>
</html>
